/**
 * @Metadata.as
 *
 * @author sodaChen mail:asframe#163.com
 * @version 1.0
 * <br>Copyright (C), 2012 ASFrame.com
 * <br>This program is protected by copyright laws.
 * <br>Program Name:ASFrame
 * <br>Date:2012-2-13
 */
package com.asframe.ref
{
	import com.asframe.collections.maps.HashMap;
	import com.asframe.lang.impl.Named;
	import com.asframe.utils.RefUtils;

	/**
	 * 元数据标签
	 * @author sodaChen
	 * Date:2012-2-13
	 */
	public class Metadata extends Named
	{
		public var firestArg	:Arg;

		public var argMap		:HashMap;
		/**
		 * 参数数组
		 * @see com.asframe.ref.Arg
		 */
		public var argAry		:Vector.<Arg>;

		public function Metadata(name:String,argMap:HashMap,argAry:Vector.<Arg>,firestArg:Arg)
		{
			this.name = name;
			this.argMap = argMap;
			this.firestArg = firestArg;
			this.argAry = argAry;
		}
//		public function get args():Array
//		{
//			if(argAry != null)
//			{
//				return argAry;
//			}
//			if(argMap == null)
//			{
//				argAry = [];
//			}
//			else
//			{
//				argAry = argMap.valuesToArray();
//			}
//			return argAry;
//		}
//		public function getFirstArg():Arg
//		{
//			if(args.length > 0)
//			{
//				return args[0];
//			}
//			return null;
//		}
		public function getArg(key:String):Arg
		{
			return argMap.get(key);
//			var len:int = args.length;
//			var arg:Arg = null;
//			for (var i:int = 0; i < len; i++)
//			{
//				arg = args[i];
//				if(arg.key == key)
//				{
//					return arg;
//				}
//			}
//			return null;
		}
		public function invokeArg(instance:*,type:Type,argKey:String = null):void
		{
			var arg:Arg = argMap.get(argKey);
			if(arg != null)
			{
				instance[arg.key] = RefUtils.valueByType(arg.key,arg.value,type);
			}
		}
//		public static function invokeArg(metadata:Metadata,instance:*,type:Type,argKey:String = null):void
//		{
//			var argAry:Array = metadata.args;
//			for each (var arg:Arg in argAry)
//			{
//				if(argKey == null || arg.key == argKey)
//				{
//					arg.invoke(instance,type);
//				}
//			}
//		}
	}
}
